import gradio as gr
from colorthief import ColorThief
from PIL import Image
import io

def get_palette(image):
    # 将上传的图像转换为字节流
    image_bytes = io.BytesIO()
    image.save(image_bytes, format='PNG')
    image_bytes.seek(0)
    
    # 使用ColorThief提取调色板
    color_thief = ColorThief(image_bytes)
    palette = color_thief.get_palette(color_count=5)
    
    # 将RGB颜色转换为十六进制表示形式
    hex_palette = ['#%02x%02x%02x' % color for color in palette]
   
    # 生成HTML代码以显示颜色
    html_palette = ''.join([f'<div style="background-color:{color};width:100px;height:100px;display:inline-block;margin:5px;">{color}</div>' for color in hex_palette])
    
    return html_palette

# 创建Gradio接口
interface = gr.Interface(
    fn=get_palette,
    inputs=gr.Image(type="pil"),
    outputs=gr.HTML(),
    title="调色板分析器",
    description="上传一张照片，分析其主色调调色板（5 个颜色），以及每一个颜色的十六进制表示形式"
)

# 启动Gradio应用
if __name__ == "__main__":
    interface.launch()